//
// Created by zhupi on 2024/10/16.
//

#include "dock_tab_widget.h"

#include "geometry_table_widget.h"

#include "plan_widget.h"

void PropertiesTabWidget::Initial() {

//    tableWidget_ = new QTableWidget(this);
//    tableWidget_->setColumnCount(4);  // 设置列数
//    tableWidget_->setHorizontalHeaderLabels(QStringList() << "Name" << "Value" << "Unit" << "Evaluated Value");
//    this->setWidget(tableWidget_);

    PropertiesWidget *propertiesWidget = new PropertiesWidget(this);
//    this->setWidget(propertiesWidget);

    mainTab_ = new QTabWidget;
//    QVBoxLayout *mainVbox = new QVBoxLayout(this);
//    mainVbox->addWidget(mainTab_);
    this->setWidget(mainTab_);

    mainTab_->addTab(propertiesWidget, "property");
    InitPlan();
    InitList();
}

void PropertiesTabWidget::Test() {

}

void PropertiesTabWidget::AddRow(const DataRow &data) {

    int row = tableWidget_->rowCount();
    tableWidget_->insertRow(row);  // 插入一行

    QTableWidgetItem *nameItem = new QTableWidgetItem(data.name);
    QTableWidgetItem *valueItem = new QTableWidgetItem(data.value);
    QTableWidgetItem *unitItem = new QTableWidgetItem(data.unit);
    QTableWidgetItem *evalValueItem = new QTableWidgetItem(data.evaluatedValue);

    tableWidget_->setItem(row, 0, nameItem);
    tableWidget_->setItem(row, 1, valueItem);
    tableWidget_->setItem(row, 2, unitItem);
    tableWidget_->setItem(row, 3, evalValueItem);

    // 根据 editable 设置是否可编辑
    if (!data.editable) {
        valueItem->setFlags(valueItem->flags() & ~Qt::ItemIsEditable);  // 禁用编辑
    }
}

void PropertiesTabWidget::RemoveRow(const QString &name)
{
    for (int i = 0; i < tableWidget_->rowCount(); ++i) {
        QTableWidgetItem *nameItem = tableWidget_->item(i, 0);
        if (nameItem && nameItem->text() == name) {
            tableWidget_->removeRow(i);  // 删除行
            break;
        }
    }
}

void PropertiesTabWidget::ChangeData(const DataRow &data)
{
    for (int i = 0; i < tableWidget_->rowCount(); ++i) {
        QTableWidgetItem *nameItem = tableWidget_->item(i, 0);
        if (nameItem && nameItem->text() == data.name) {
            tableWidget_->item(i, 1)->setText(data.value);
            tableWidget_->item(i, 2)->setText(data.unit);
            tableWidget_->item(i, 3)->setText(data.evaluatedValue);

            // 更新 editable 状态
            QTableWidgetItem *valueItem = tableWidget_->item(i, 1);
            if (!data.editable) {
                valueItem->setFlags(valueItem->flags() & ~Qt::ItemIsEditable);  // 禁用编辑
            } else {
                valueItem->setFlags(valueItem->flags() | Qt::ItemIsEditable);   // 允许编辑
            }
            break;
        }
    }
}

void PropertiesTabWidget::EnableRow(const QString &name)
{
    for (int i = 0; i < tableWidget_->rowCount(); ++i) {
        QTableWidgetItem *nameItem = tableWidget_->item(i, 0);
        if (nameItem && nameItem->text() == name) {
            for (int j = 0; j < tableWidget_->columnCount(); ++j) {
                QTableWidgetItem *item = tableWidget_->item(i, j);
                if (item) {
                    item->setFlags(item->flags() | Qt::ItemIsEditable);  // 允许编辑整行
                }
            }
            break;
        }
    }
}

void PropertiesTabWidget::EnableRowItem(const QString &name, const QString &type)
{

    int column = -1;
    if (type == "Name") column = 0;
    else if (type == "Value") column = 1;
    else if (type == "Unit") column = 2;
    else if (type == "Evaluated Value") column = 3;

    if (column == -1) return;  // 如果列名不匹配，返回

    for (int i = 0; i < tableWidget_->rowCount(); ++i) {
        QTableWidgetItem *nameItem = tableWidget_->item(i, 0);
        if (nameItem && nameItem->text() == name) {
            QTableWidgetItem *item = tableWidget_->item(i, column);
            if (item != nullptr) {
                item->setFlags(item->flags() | Qt::ItemIsEditable);  // 启用该单元格编辑
            }
            break;
        }
    }
}

void PropertiesTabWidget::InitList() {

}

void PropertiesTabWidget::InitPlan() {
    PlanWidget *planWidget = new PlanWidget(this);
    planWidget->Initial();
    mainTab_->addTab(planWidget, "plan");
}
